#ifndef MQTTCONFIG_H
#define MQTTCONFIG_H

#include <QString>

/**
 * @brief MQTT配置数据模型
 * 
 * 用于存储和传递MQTT配置参数及设备状态
 */
class MqttConfig
{
public:
    MqttConfig()
        : serverHost("bemfa.com")
        , serverPort(8344)
        , uid("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")// 填写自己的uid
        , fanTopic("fan001") // 填写自己的主题
        , tempTopic("temp001") // 填写自己的主题
        , heartbeatInterval(60)
        , reconnectInterval(5)
        , autoReconnect(true)
        , manualMode(false)
        , fanSpeed(0)
        , temperature(0.0)
    {
    }

    // 服务器配置
    QString serverHost;         // 服务器地址
    quint16 serverPort;         // 服务器端口
    QString uid;                // 用户私钥
    
    // 主题配置
    QString fanTopic;           // 风扇控制主题
    QString tempTopic;          // 温度数据主题
    
    // 连接配置
    int heartbeatInterval;      // 心跳间隔(秒)
    int reconnectInterval;      // 重连间隔(秒)
    bool autoReconnect;         // 自动重连
    
    // 设备状态
    bool manualMode;            // false=自动模式(M0), true=手动模式(M1)
    int fanSpeed;               // 风扇档位: 0=关闭(S0), 1=低速(S1), 2=中速(S2), 3=高速(S3)
    double temperature;         // 温度值
    
    /**
     * @brief 获取模式控制消息
     * @return M0(自动) 或 M1(手动)
     */
    QString getModeMessage() const
    {
        return manualMode ? "M1" : "M0";
    }
    
    /**
     * @brief 获取风扇档位消息
     * @return S0/S1/S2/S3
     */
    QString getFanSpeedMessage() const
    {
        return QString("S%1").arg(fanSpeed);
    }
    
    /**
     * @brief 获取温度消息
     * @return 温度浮点数字符串
     */
    QString getTemperatureMessage() const
    {
        return QString::number(temperature, 'f', 1);
    }
    
    /**
     * @brief 从消息解析模式
     * @param msg 消息内容 (M0/M1)
     * @return true表示解析成功
     */
    bool parseModeMessage(const QString &msg)
    {
        if (msg == "M0") {
            manualMode = false;
            return true;
        } else if (msg == "M1") {
            manualMode = true;
            return true;
        }
        return false;
    }
    
    /**
     * @brief 从消息解析风扇档位
     * @param msg 消息内容 (S0/S1/S2/S3)
     * @return true表示解析成功
     */
    bool parseFanSpeedMessage(const QString &msg)
    {
        if (msg.startsWith("S") && msg.length() == 2) {
            bool ok;
            int speed = msg.mid(1).toInt(&ok);
            if (ok && speed >= 0 && speed <= 3) {
                fanSpeed = speed;
                return true;
            }
        }
        return false;
    }
    
    /**
     * @brief 从消息解析温度
     * @param msg 消息内容 (浮点数字符串)
     * @return true表示解析成功
     */
    bool parseTemperatureMessage(const QString &msg)
    {
        bool ok;
        double temp = msg.toDouble(&ok);
        if (ok) {
            temperature = temp;
            return true;
        }
        return false;
    }
};

#endif // MQTTCONFIG_H

